from agents.mcp.server import MCPServerStdio


class CityMcpServer:
    def __init__(self):
        # 设置服务名称（后续外部可以直接获取）
        self.name = "City查询服务"
        self.server = None  # 先初始化，避免init_mcp_server时未定义

    # 1-创建MCP服务对象
    def create_mcp_server(self):
        self.server = MCPServerStdio(
            name=self.name,
            params={
                "command": "C:\\Windows\\System32\\cmd.exe",
                "args": ["/c",
                         "D:\\TT_WORK+\\AITrain\\20250426_1_McpServerClient\\.venv\\Scripts\\python.exe",
                         "D:\\TT_WORK+\\AITrain\\20250426_1_McpServerClient\\city_02_mcp_server.py"],
                "env": {}
            },
            # 缓存工具列表以减少延迟，不需要每次连接时重新获取工具列表
            cache_tools_list=True
        )
        return self.server

    # 2-启动MCP服务
    async def connect_mcp_server(self):
        try:
            print("[城市MCP服务] 正在连接到MCP服务器...")
            await self.server.connect()
            print("[城市MCP服务] 连接成功！")

            tools = await self.server.list_tools()
            if not tools:
                print("[城市MCP服务] 未获取到可用工具。")
                return []
            print(f"[城市MCP服务] 可用工具列表（共{len(tools)}项）：")
            for idx, tool in enumerate(tools, 1):
                print(f" {idx}. {tool.name}: {tool.description}")
            return tools
        except Exception as e:
            print(f"[城市MCP服务] 连接或获取工具列表失败: {e}")
            return []

    # 3-初始化MCP服务-【创建MCP服务对象】+【启动MCP服务-打印工具列表】
    async def init_mcp_server(self):
        # 1-创建MCP服务对象
        if not self.server:
            print("[城市MCP服务] 正在创建MCP服务对象...")
            self.create_mcp_server()
        # 2-启动MCP服务
        await self.connect_mcp_server()
        return self.server
